/*
 * ImagenJson.cpp
 *      Author: sebastian
 */

#include "ImagenJson.h"

ImagenJson::ImagenJson() {
	tamanio = 0;
}

int ImagenJson::armarJson(std::string path){
	std::ifstream archivo(path , std::ios_base::in);
	std::string auxiliar = "";
	if (archivo.is_open()){
		if (archivo.good()){
			archivo.seekg(0,archivo.end);
			int tamanio = archivo.tellg();
			archivo.seekg(0, archivo.beg);
			unsigned char* buffer = new unsigned char[tamanio];
			for (int i = 0; i< tamanio ; i++){
				char buf = ' ';
				archivo.read(&buf,sizeof(char));
				buffer[i] = buf + 128;
			}
			archivo.close();
			imagen["tamanio"] = tamanio;
			std::string resultado = g_base64_encode(buffer,(unsigned int)tamanio);
//			std::cout << resultado << std::endl;
			imagen["datos"] = resultado.c_str();
			delete[] buffer;
		}
		else {
			return 1;
		}
	} else {
		return 1;
	}
	return 0;
}

Json::Value& ImagenJson::getJsonImagen(){
	return imagen;
}

char* ImagenJson::getImagen(){
	if (imagen == 0) return 0;
//	std::ofstream salida("imagen.gif", std::ios_base::out);
	unsigned char* datos = g_base64_decode(imagen["datos"].asString().c_str(),&tamanio);
	char* resultado = new char[tamanio];
	for(unsigned int i = 0; i< tamanio; i++){
		resultado[i] = datos[i] -128;
	}
	g_free(datos);
//	salida.write(resultado,tamanio);
//	salida.close();
	return resultado;
}

void ImagenJson::getImagenToPath(const std::string& path){
	std::ofstream salida(path.c_str(), std::ios_base::out | std::ofstream::binary | std::ios_base::trunc);
	char* data = this->getImagen();
	salida.write(data,tamanio);
	delete[] data;
	salida.close();
}

void ImagenJson::setJson(Json::Value& root){
	imagen = root;
}

unsigned int ImagenJson::getTamanio(){
	return tamanio;
}
